# -*- coding: utf-8 -*-
"""
日期时间工具模块
目的：确保应用中使用的时间都是正确的北京时间
职责：提供统一的时间获取和格式化功能
"""
from datetime import datetime
from sqlalchemy import text
from app.config.database import SessionLocal

def get_db_now():
    """
    获取数据库当前时间（北京时间）
    目的：确保使用数据库时间而不是应用服务器时间，避免时间不一致

    Returns:
        datetime: 数据库当前时间
    """
    db = SessionLocal()
    try:
        result = db.execute(text("SELECT NOW()"))
        db_time = result.scalar()
        return db_time
    finally:
        db.close()

def get_db_today():
    """
    获取数据库当前日期（北京时间）

    Returns:
        date: 数据库当前日期
    """
    db_now = get_db_now()
    return db_now.date() if db_now else None

def format_datetime(dt):
    """
    格式化时间为标准字符串格式

    Args:
        dt: datetime对象

    Returns:
        str: 格式化后的时间字符串
    """
    if dt is None:
        return None
    return dt.strftime('%Y-%m-%d %H:%M:%S')

def ensure_beijing_time(func):
    """
    装饰器：确保函数使用数据库时间（北京时间）

    用于需要准确时间的业务逻辑函数
    """
    def wrapper(*args, **kwargs):
        # 将数据库时间注入到函数参数中
        if 'current_time' not in kwargs:
            kwargs['current_time'] = get_db_now()
        return func(*args, **kwargs)
    return wrapper